/**
 * 版权所有 (C), 2019-2019, XXX有限公司
 * 项目名：com.company.study.designpatterns.flyweight
 * 文件名: FlyweightFactory
 * 日期: 2019/6/16 11:00
 * 说明:
 */
package com.company.study.designpatterns.flyweight;

import java.util.HashMap;
import java.util.Map;

/**
 * 享元工厂，说白了就是一个缓存
 *
 * @author Anbang713
 * @create 2019/6/16
 */
public class FlyweightFactory {
    /**
     * 缓存多个flyweight对象，这里只是示意一下
     */
    private Map<String, Flyweight> fsMap = new HashMap<String, Flyweight>();

    /**
     * 获取key对应的享元对象
     */
    public Flyweight getFlyweight(String key) {
        //这个方法里面基本的实现步骤如下：
        //1：先从缓存里面查找，是否存在key对应的Flyweight对象
        Flyweight f = fsMap.get(key);

        //2：如果存在，就返回相对应的Flyweight对象
        if (f == null) {
            //3：如果不存在
            //3.1：创建一个新的Flyweight对象
            f = new ConcreteFlyweight(key);
            //3.2：把这个新的Flyweight对象添加到缓存里面
            fsMap.put(key, f);
            //3.3：然后返回这个新的Flyweight对象
        }
        return f;
    }

    /**
     * 获取fsMap数量
     *
     * @return
     */
    public int getFlyweightSize() {
        return fsMap.size();
    }
}